#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
std::timed_mutex mtx;
void foo(int &num)
{
    // 1、timed_mutex介绍
    // lock,unlock 和普通的mutex一样
    // try_lock: 非阻塞抢一次锁，抢到返回 true，抢不到立即返回 false: 只试一次
    if (mtx.try_lock())
    {
        // 拖住锁 第一个锁进来了，第二个锁就会失败
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
        num++;
        mtx.unlock();
    }
    else
    {
        cout << this_thread::get_id() << "没抢到" << endl;
    }
}
int main()
{
    int num{1};
    thread t1(foo, std::ref(num));
    thread t2(foo, ref(num));
    t1.join();
    t2.join();
    cout << "num is " << num << endl;
    return 0;
}